跳到主要内容

14 从视频中提取图片

阅读量

0

阅读人次

0

此 FFMPEG 命令将视频作为输入并以特定间隔提取静止帧

示例(每 5 秒提取一次图片):

ffmpeg -i INPUT -f image2 -bt 20M -vf fps=1/5 %03d.png

下面是命令解释:

-i INPUT:输入文件

-f image2:这是 FFMPEG 的图像Muxer,将视频帧写入图像文件。

-bt 20M:根据您输入的文件格式,PNG 文件格式导出需要此选项。 此选项称为“Bitrate Tollerance”,在此示例中设置为 20 Mbps。

-vf fps=1/45:这是可以根据您的需要调整的时间间隔值(在此示例中,每 45 秒 1 张图片)。 使用 -r (rate) 选项 (-r 1/45) 也可以达到同样的效果。

%03d.png:这将输出一个文件名为 3 位数字的文件,从“000.png”开始

特定宽度和高度的示例:

ffmpeg -i INPUT -r 1 -s 1280x720 -f image2 %03d.jpeg

这将从视频中每秒提取一个视频帧,并将它们输出到名为 000.jpg、001.jpeg 等的文件中。图像将被缩放以适应特定的 (W)idth x (H)eight 值,如 以上示例为 1280x720。

在 1280x720 下每 45 秒具有缩放、填充和Letterbox 的示例:

ffmpeg -i INPUT -r 1/45 -s 1280x720 -vf "scale=(iw*sar)*min(1280/(iw*sar)\,720/ih):ih*min(1280/(iw*sar)\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2" -bt 10M -f image2 %03d.png

第一个滤镜是缩放滤镜(-vf scale)。

缩放滤镜功能强大,因为它可以进行数值替换和运算。 在这种情况下,将计算新的缩放宽度和高度。 它将图像作为输入进行缩放以适应所需输出格式的宽度和和高度,而不会扭曲图像。

您不需要对比例参数进行任何修改,因为它会自动将实际值替换为“iw”(图像宽度)、“sar”(采样宽高比)和“ih”(图像高度)。

第二个滤镜是填充滤镜(-vf pad)。 它具有与缩放滤镜相同的特性。 所以它会为你计算出确切的数字。 您无需更改任何内容即可使其正常工作。

这些参数告诉填充滤镜使输出为 720x1280 并将输入图像放置在帧的中心。填充滤镜将在输入图像没有覆盖的任何地方用黑色填充输出图像。 黑条最终将添加到两侧以弥补差异。

如果您只想提取指定数量的帧,可以将上述命令与-frames:v-t选项结合使用,或者与-ss结合使用以从某个时间点开始提取,例如:

从 00h:00m:15ss.00ms 开始提取 24 帧:

ffmpeg -ss 00:00:15.00 -i INPUT -frames:v 24 -f image2 -bt 10M %03d.png

从时间 00h:00m:15s.00ms 开始,提取 5 秒的图片:

ffmpeg -ss 00:00:15.00 -i INPUT -t 00:00:05.00 -f image2 -bt 10M %03d.png